/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package convertirafndafd;

import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Lisseth,Anibal,Carlos
 */
public class AutomataFinitoNoDeterminista {

    private ArrayList<String> estados;
    private ArrayList<String> alfabeto;
    private ArrayList<String> nodosFinales;
    private String nodoInicial;
    private ArrayList<String> tabla [][];

    public AutomataFinitoNoDeterminista() {
    }

    public AutomataFinitoNoDeterminista(ArrayList<String> estados, ArrayList<String> alfabeto, ArrayList<String> nodosFinales, String nodoInicial, ArrayList<String>[][] t) {
        this.estados = estados;
        this.alfabeto = alfabeto;
        this.nodosFinales = nodosFinales;
        this.nodoInicial = nodoInicial;
        this.tabla=t;

    }

   

    public ArrayList<String> getAlfabeto() {
        return alfabeto;
    }

    public void setAlfabeto(ArrayList<String> alfabeto) {
        this.alfabeto = alfabeto;
    }

    public ArrayList<String> getEstados() {
        return estados;
    }

    public void setEstados(ArrayList<String> estados) {
        this.estados = estados;
    }

    public String getNodoInicial() {
        return nodoInicial;
    }

    public void setNodoInicial(String nodoInicial) {
        this.nodoInicial = nodoInicial;
    }

    public ArrayList<String> getNodosFinales() {
        return nodosFinales;
    }

    public void setNodosFinales(ArrayList<String> nodosFinales) {
        this.nodosFinales = nodosFinales;
    }

    public ArrayList<String>[][] getTabla() {
        return tabla;
    }

    public void setTabla(ArrayList<String>[][] tabla) {
        this.tabla = tabla;
    }


    public void transacion(ModeloTablaAFND m){
      ModeloTablaAFND modeloTabla=m;
        for(int x=0;x<estados.size();x++){
            for(int y=0;y<alfabeto.size();y++){           
                   int bandera=JOptionPane.NO_OPTION;
                   ArrayList<String> cadDentroArreglo=new ArrayList<String>();
                   tabla[x][y]= cadDentroArreglo;
                do  {                   
                     String cadena=JOptionPane.showInputDialog("Transiciones estado:  "+estados.get(x)+"\nCon la letra: "+alfabeto.get(y));
                     System.out.println("Ingrese la transiciones para el ESTADO "+estados.get(x)+" con la letra del ALFABETO : "+alfabeto.get(y));
                     if(estados.contains(cadena) || cadena.length()==0 ){

                          if(!cadDentroArreglo.contains(cadena)){
                             
                              cadDentroArreglo.add(cadena);
                              cadDentroArreglo.remove("");
                              tabla[x][y]=cadDentroArreglo;
                              bandera=JOptionPane.showOptionDialog(null, "Ingresar otra transicion con el mismo estado y alfabeto", "TRANSICION", JOptionPane.YES_NO_OPTION,  JOptionPane.QUESTION_MESSAGE, null,null,null);

                          }else{
                         
                         bandera=JOptionPane.YES_OPTION;
                         int  cerrarMetodo=JOptionPane.showOptionDialog(null, "La transicion a ese estado ya esta ingresado", "Mensaje", JOptionPane.OK_CANCEL_OPTION,  JOptionPane.QUESTION_MESSAGE, null,null,null);
                         if(cerrarMetodo==JOptionPane.CANCEL_OPTION){
                            return;
                         }
                         }


                        }else{
                         
                         bandera=JOptionPane.YES_OPTION;
                         int  cerrarMetodo=JOptionPane.showOptionDialog(null, "El caracter no se encuentra en el conjunto de estados", "Mensaje", JOptionPane.OK_CANCEL_OPTION,  JOptionPane.QUESTION_MESSAGE, null,null,null);
                         if(cerrarMetodo==JOptionPane.CANCEL_OPTION){
                            return;
                         }
                        }


                  } while (bandera==JOptionPane.YES_OPTION);

                 modeloTabla.rellenarTabla(x, y,tabla[x][y]);

            }
        }
     

        //MOSTRAR EL ARREGLO TABLE
        String texto ="";
        for(int x=0;x<estados.size();x++){
            for(int y=0;y<alfabeto.size();y++){
                System.out.println(texto+="\t"+tabla[x][y]);
            }texto+="\n";
        }
    }

}
